home *** CD-ROM | disk | FTP | other *** search
/ Aminet 4 / Aminet 4 - November 1994.iso / aminet / comm / term / term41source.lha / Extras / Source / term-Source.lha / TranslationPanel.c < prev    next >
C/C++ Source or Header  |  1994-08-14  |  17KB  |  732 lines

  1. /*
  2. **    TranslationPanel.c
  3. **
  4. **    Character code translation editing panel
  5. **
  6. **    Copyright © 1990-1994 by Olaf `Olsen' Barthel
  7. **        All Rights Reserved
  8. */
  9.  
  10. #include "termGlobal.h"
  11.  
  12. enum    {    GAD_PAGE=1,GAD_USE,GAD_DEFAULT,GAD_LOAD,GAD_SAVE,GAD_CANCEL,
  13.         GAD_CHAR=700
  14.     };
  15.  
  16.     /* The character table. */
  17.  
  18. STATIC STRPTR CharCodes[256] =
  19. {
  20.     "NUL","SOH","STX","ETX","EOT","ENQ","ACK","BEL","BS" ,"HT" ,"LF" ,"VT" ,"FF" ,"CR" ,"SO" ,"SI" ,
  21.     "DLE","DC1","DC2","DC3","DC4","NAK","SYN","ETB","CAN","EM" ,"SUB","ESC","FS" ,"GS" ,"RS" ,"US" ,
  22.     "SP" , "!" , "\"", "#" , "$" , "%" , "&" , "'" , "(" , ")" , "*" , "+" , "," , "-" , "." , "/" ,
  23.      "0" , "1" , "2" , "3" , "4" , "5" , "6" , "7" , "8" , "9" , ":" , ";" , "<" , "=" , ">" , "?" ,
  24.      "@" , "A" , "B" , "C" , "D" , "E" , "F" , "G" , "H" , "I" , "J" , "K" , "L" , "M" , "N" , "O" ,
  25.      "P" , "Q" , "R" , "S" , "T" , "U" , "V" , "W" , "X" , "Y" , "Z" , "[" , "\\", "]" , "^" , "_" ,
  26.      "`" , "a" , "b" , "c" , "d" , "e" , "f" , "g" , "h" , "i" , "j" , "k" , "l" , "m" , "n" , "o" ,
  27.      "p" , "q" , "r" , "s" , "t" , "u" , "v" , "w" , "x" , "y" , "z" , "{" , "|" , "}" , "~" ,"DEL",
  28.     "128","129","130","131","132","133","134","135","136","137","138","139","140","141","SS2","SS3",
  29.     "DCS","145","146","147","148","149","150","151","152","153","154","CSI","ST" ,"OSC","PM" ,"APC",
  30.     "NBS", "¡" , "¢" , "£" , "¤" , "¥" , "¦" , "§" , "¨" , "©" , "ª" , "«" , "¬" ,"SHY", "®" , "¯" ,
  31.      "°" , "±" , "²" , "³" , "´" , "µ" , "¶" , "·" , "¸" , "¹" , "º" , "»" , "¼" , "½" , "¾" , "¿" ,
  32.      "À" , "Á" , "Â" , "Ã" , "Ä" , "Å" , "Æ" , "Ç" , "È" , "É" , "Ê" , "Ë" , "Ì" , "Í" , "Î" , "Ï" ,
  33.      "Ð" , "Ñ" , "Ò" , "Ó" , "Ô" , "Õ" , "Ö" , "×" , "Ø" , "Ù" , "Ú" , "Û" , "Ü" , "Ý" , "Þ" , "ß" ,
  34.      "à" , "á" , "â" , "ã" , "ä" , "å" , "æ" , "ç" , "è" , "é" , "ê" , "ë" , "ì" , "í" , "î" , "ï" ,
  35.      "ð" , "ñ" , "ò" , "ó" , "ô" , "õ" , "ö" , "÷" , "ø" , "ù" , "ú" , "û" , "ü" , "ý" , "þ" , "ÿ"
  36. };
  37.  
  38. STATIC BOOLEAN __regargs
  39. CodePanel(struct Window *Window,UBYTE CharCode,struct TranslationEntry **SendTable,struct TranslationEntry **ReceiveTable)
  40. {
  41.     struct LayoutHandle    *Handle;
  42.     BOOLEAN             Result = FALSE;
  43.  
  44.     if(Handle = LT_CreateHandleTags(Window -> WScreen,
  45.         LH_LocaleHook,    &LocaleHook,
  46.     TAG_DONE))
  47.     {
  48.         struct Window    *PanelWindow;
  49.         UBYTE         SendBuffer[256],
  50.                  ReceiveBuffer[256];
  51.  
  52.         if(SendTable[CharCode])
  53.             TranslateBack(SendTable[CharCode] -> String,SendTable[CharCode] -> Len,SendBuffer);
  54.         else
  55.             SendBuffer[0] = 0;
  56.  
  57.         if(ReceiveTable[CharCode])
  58.             TranslateBack(ReceiveTable[CharCode] -> String,ReceiveTable[CharCode] -> Len,ReceiveBuffer);
  59.         else
  60.             ReceiveBuffer[0] = 0;
  61.  
  62.         LT_New(Handle,
  63.             LA_Type,    VERTICAL_KIND,
  64.         TAG_DONE);
  65.         {
  66.             if(CharCodes[CharCode][0] == '1' && CharCodes[CharCode][1])
  67.                 SPrintf(SharedBuffer,LocaleString(MSG_V36_1772),CharCodes[CharCode]);
  68.             else
  69.                 SPrintf(SharedBuffer,LocaleString(MSG_V36_1773),CharCode,CharCodes[CharCode]);
  70.  
  71.             LT_New(Handle,
  72.                 LA_Type,    VERTICAL_KIND,
  73.                 LA_LabelText,    SharedBuffer,
  74.             TAG_DONE);
  75.             {
  76.                 LT_New(Handle,
  77.                     LA_Type,        STRING_KIND,
  78.                     LA_LabelID,        MSG_TRANSLATIONPANEL_SEND_CODE_AS_GAD,
  79.                     LA_STRPTR,        SendBuffer,
  80.                     LA_Chars,        30,
  81.                     STRINGA_Justification,    GACT_STRINGCENTER,
  82.                     GTST_MaxChars,        255,
  83.                 TAG_DONE);
  84.  
  85.                 LT_New(Handle,
  86.                     LA_Type,        STRING_KIND,
  87.                     LA_LabelID,        MSG_TRANSLATIONPANEL_RECEIVE_CODE_AS_GAD,
  88.                     LA_STRPTR,        ReceiveBuffer,
  89.                     STRINGA_Justification,    GACT_STRINGCENTER,
  90.                     GTST_MaxChars,        255,
  91.                 TAG_DONE);
  92.  
  93.                 LT_EndGroup(Handle);
  94.             }
  95.  
  96.             LT_New(Handle,
  97.                 LA_Type,VERTICAL_KIND,
  98.             TAG_DONE);
  99.             {
  100.                 LT_New(Handle,
  101.                     LA_Type,    XBAR_KIND,
  102.                     LAXB_FullSize,    TRUE,
  103.                 TAG_DONE);
  104.  
  105.                 LT_EndGroup(Handle);
  106.             }
  107.  
  108.             LT_New(Handle,LA_Type,HORIZONTAL_KIND,
  109.                 LAGR_SameSize,    TRUE,
  110.                 LAGR_Spread,    TRUE,
  111.             TAG_DONE);
  112.             {
  113.                 LT_New(Handle,
  114.                     LA_Type,    BUTTON_KIND,
  115.                     LA_LabelID,    MSG_GLOBAL_USE_GAD,
  116.                     LA_ID,        GAD_USE,
  117.                     LABT_ReturnKey,    TRUE,
  118.                     LABT_ExtraFat,    TRUE,
  119.                 TAG_DONE);
  120.  
  121.                 LT_New(Handle,
  122.                     LA_Type,    BUTTON_KIND,
  123.                     LA_LabelID,    MSG_GLOBAL_CANCEL_GAD,
  124.                     LA_ID,        GAD_CANCEL,
  125.                     LABT_EscKey,    TRUE,
  126.                     LABT_ExtraFat,    TRUE,
  127.                 TAG_DONE);
  128.  
  129.                 LT_EndGroup(Handle);
  130.             }
  131.  
  132.             LT_EndGroup(Handle);
  133.         }
  134.  
  135.         if(PanelWindow = LT_Layout(Handle,LocaleString(MSG_TRANSLATIONPANEL_CHARACTER_CODE_TRANSLATION_TXT),NULL,0,0,IDCMP_CLOSEWINDOW,0,
  136.             LAWN_HelpHook,        &GuideHook,
  137.             LAWN_Parent,        Window,
  138.             WA_DepthGadget,        TRUE,
  139.             WA_CloseGadget,        TRUE,
  140.             WA_DragBar,        TRUE,
  141.             WA_RMBTrap,        TRUE,
  142.             WA_Activate,        TRUE,
  143.         TAG_DONE))
  144.         {
  145.             struct IntuiMessage    *Message;
  146.             BOOLEAN             Done = FALSE;
  147.             ULONG             MsgClass,
  148.                          MsgQualifier;
  149.             UWORD             MsgCode;
  150.             struct Gadget        *MsgGadget;
  151.  
  152.             LT_ShowWindow(Handle,TRUE);
  153.  
  154.             GuideContext(CONTEXT_TRANSLATION);
  155.  
  156.             PushWindow(PanelWindow);
  157.  
  158.             do
  159.             {
  160.                 if(Wait(PORTMASK(PanelWindow -> UserPort) | SIG_BREAK) & SIG_BREAK)
  161.                     break;
  162.  
  163.                 while(Message = (struct IntuiMessage *)GT_GetIMsg(PanelWindow -> UserPort))
  164.                 {
  165.                     MsgClass    = Message -> Class;
  166.                     MsgQualifier    = Message -> Qualifier;
  167.                     MsgCode        = Message -> Code;
  168.                     MsgGadget    = (struct Gadget *)Message -> IAddress;
  169.  
  170.                     GT_ReplyIMsg(Message);
  171.  
  172.                     LT_HandleInput(Handle,MsgQualifier,&MsgClass,&MsgCode,&MsgGadget);
  173.  
  174.                     if(MsgClass == IDCMP_CLOSEWINDOW)
  175.                         Done = TRUE;
  176.  
  177.                     if(MsgClass == IDCMP_GADGETUP)
  178.                     {
  179.                         switch(MsgGadget -> GadgetID)
  180.                         {
  181.                             case GAD_USE:
  182.  
  183.                                 if(SendBuffer[0])
  184.                                 {
  185.                                     struct TranslationEntry *Entry = AllocTranslationEntry(SendBuffer);
  186.  
  187.                                     if(Entry)
  188.                                     {
  189.                                         if(SendTable[CharCode])
  190.                                             FreeTranslationEntry(SendTable[CharCode]);
  191.  
  192.                                         SendTable[CharCode] = Entry;
  193.  
  194.                                         Result = TRUE;
  195.                                     }
  196.                                 }
  197.                                 else
  198.                                 {
  199.                                     if(SendTable[CharCode])
  200.                                         FreeTranslationEntry(SendTable[CharCode]);
  201.  
  202.                                     SendTable[CharCode] = NULL;
  203.  
  204.                                     Result = TRUE;
  205.                                 }
  206.  
  207.                                 if(ReceiveBuffer[0])
  208.                                 {
  209.                                     struct TranslationEntry *Entry = AllocTranslationEntry(ReceiveBuffer);
  210.  
  211.                                     if(Entry)
  212.                                     {
  213.                                         if(ReceiveTable[CharCode])
  214.                                             FreeTranslationEntry(ReceiveTable[CharCode]);
  215.  
  216.                                         ReceiveTable[CharCode] = Entry;
  217.  
  218.                                         Result = TRUE;
  219.                                     }
  220.                                 }
  221.                                 else
  222.                                 {
  223.                                     if(ReceiveTable[CharCode])
  224.                                         FreeTranslationEntry(ReceiveTable[CharCode]);
  225.  
  226.                                     ReceiveTable[CharCode] = NULL;
  227.  
  228.                                     Result = TRUE;
  229.                                 }
  230.  
  231.                                 Done = TRUE;
  232.                                 break;
  233.  
  234.                             case GAD_CANCEL:
  235.  
  236.                                 Done = TRUE;
  237.                                 break;
  238.                         }
  239.                     }
  240.                 }
  241.             }
  242.             while(!Done);
  243.  
  244.             PopWindow();
  245.         }
  246.  
  247.         LT_DeleteHandle(Handle);
  248.     }
  249.  
  250.     return(Result);
  251. }
  252.  
  253. BOOLEAN __regargs
  254. TranslationPanel(struct TranslationEntry ***SendTablePtr,struct TranslationEntry ***ReceiveTablePtr,STRPTR LastTranslation,struct Window *Parent)
  255. {
  256.     struct LayoutHandle    *Handle;
  257.     BOOLEAN             MadeChanges    = FALSE,
  258.                  Created    = FALSE;
  259.  
  260.     struct TranslationEntry    **SendTable    = *SendTablePtr,
  261.                 **ReceiveTable    = *ReceiveTablePtr;
  262.  
  263.     if(!SendTable)
  264.     {
  265.         if(!(SendTable = AllocTranslationTable()))
  266.         {
  267.             DisplayBeep(Window -> WScreen);
  268.  
  269.             return(FALSE);
  270.         }
  271.  
  272.         if(!(ReceiveTable = AllocTranslationTable()))
  273.         {
  274.             DisplayBeep(Window -> WScreen);
  275.  
  276.             FreeTranslationTable(SendTable);
  277.  
  278.             SendTable = NULL;
  279.  
  280.             return(FALSE);
  281.         }
  282.  
  283.         if(!FillTranslationTable(SendTable))
  284.         {
  285.             DisplayBeep(Window -> WScreen);
  286.  
  287.             FreeTranslationTable(SendTable);
  288.  
  289.             SendTable = NULL;
  290.  
  291.             FreeTranslationTable(ReceiveTable);
  292.  
  293.             ReceiveTable = NULL;
  294.  
  295.             return(FALSE);
  296.         }
  297.  
  298.         if(!FillTranslationTable(ReceiveTable))
  299.         {
  300.             DisplayBeep(Window -> WScreen);
  301.  
  302.             FreeTranslationTable(SendTable);
  303.  
  304.             SendTable = NULL;
  305.  
  306.             FreeTranslationTable(ReceiveTable);
  307.  
  308.             ReceiveTable = NULL;
  309.  
  310.             return(FALSE);
  311.         }
  312.  
  313.         Created = TRUE;
  314.     }
  315.  
  316.     *SendTablePtr        = SendTable;
  317.     *ReceiveTablePtr    = ReceiveTable;
  318.  
  319.     if(Handle = LT_CreateHandleTags(Window -> WScreen,
  320.         LH_LocaleHook,    &LocaleHook,
  321.     TAG_DONE))
  322.     {
  323.         struct Window    *PanelWindow;
  324.         LONG         i,Width,Max = 0;
  325.  
  326.         for(i = 0 ; i < 256 ; i++)
  327.         {
  328.             if((Width = LT_LabelChars(Handle,CharCodes[i])) > Max)
  329.                 Max = Width;
  330.         }
  331.  
  332.         LT_New(Handle,
  333.             LA_Type,    VERTICAL_KIND,
  334.         TAG_DONE);
  335.         {
  336.             LT_New(Handle,
  337.                 LA_Type,    VERTICAL_KIND,
  338.                 LA_LabelID,    MSG_V36_1774,
  339.             TAG_DONE);
  340.             {
  341.                 LT_New(Handle,
  342.                     LA_Type,    VERTICAL_KIND,
  343.                 TAG_DONE);
  344.                 {
  345.                     STATIC STRPTR Halfs[] =
  346.                     {
  347.                         "NUL-DEL",
  348.                         "128-\"ÿ\"",
  349.                         NULL
  350.                     };
  351.  
  352.                     LT_New(Handle,
  353.                         LA_Type,    CYCLE_KIND,
  354.                         LA_LabelID,    MSG_TRANSLATIONPANEL_CHARACTER_PAGE_GAD,
  355.                         LA_ID,        GAD_PAGE,
  356.                         GTCY_Labels,    Halfs,
  357.                         LA_NoKey,    TRUE,
  358.                     TAG_DONE);
  359.  
  360.                     LT_New(Handle,
  361.                         LA_Type,    XBAR_KIND,
  362.                     TAG_DONE);
  363.  
  364.                     LT_EndGroup(Handle);
  365.                 }
  366.  
  367.                 LT_New(Handle,
  368.                     LA_Type,    VERTICAL_KIND,
  369.                 TAG_DONE);
  370.                 {
  371.                     WORD i,j;
  372.  
  373.                     for(i = 0 ; i < 16 ; i++)
  374.                     {
  375.                         LT_New(Handle,
  376.                             LA_Type,    HORIZONTAL_KIND,
  377.                             LA_SameSize,    TRUE,
  378.                         TAG_DONE);
  379.                         {
  380.                             for(j = 0 ; j < 8 ; j++)
  381.                             {
  382.                                 LT_New(Handle,
  383.                                     LA_Type,    BUTTON_KIND,
  384.                                     LA_LabelText,    CharCodes[i * 8 + j],
  385.                                     LA_ID,        GAD_CHAR + i * 8 + j,
  386.                                     LA_Chars,    Max,
  387.                                     LA_NoKey,    TRUE,
  388.                                 TAG_DONE);
  389.                             }
  390.  
  391.                             LT_EndGroup(Handle);
  392.                         }
  393.                     }
  394.  
  395.                     LT_EndGroup(Handle);
  396.                 }
  397.  
  398.                 LT_EndGroup(Handle);
  399.             }
  400.  
  401.             LT_New(Handle,
  402.                 LA_Type,VERTICAL_KIND,
  403.             TAG_DONE);
  404.             {
  405.                 LT_New(Handle,
  406.                     LA_Type,    XBAR_KIND,
  407.                     LAXB_FullSize,    TRUE,
  408.                 TAG_DONE);
  409.  
  410.                 LT_EndGroup(Handle);
  411.             }
  412.  
  413.             LT_New(Handle,LA_Type,HORIZONTAL_KIND,
  414.                 LAGR_Spread,    TRUE,
  415.             TAG_DONE);
  416.             {
  417.                 LT_New(Handle,
  418.                     LA_Type,    BUTTON_KIND,
  419.                     LA_LabelID,    MSG_GLOBAL_USE_GAD,
  420.                     LA_ID,        GAD_USE,
  421.                     LA_NoKey,    TRUE,
  422.                     LABT_ExtraFat,    TRUE,
  423.                 TAG_DONE);
  424.  
  425.                 LT_New(Handle,
  426.                     LA_Type,    BUTTON_KIND,
  427.                     LA_LabelID,    MSG_GLOBAL_DEFAULT_GAD,
  428.                     LA_ID,        GAD_DEFAULT,
  429.                     LA_NoKey,    TRUE,
  430.                     LABT_ExtraFat,    TRUE,
  431.                 TAG_DONE);
  432.  
  433.                 LT_New(Handle,
  434.                     LA_Type,    BUTTON_KIND,
  435.                     LA_LabelID,    MSG_GLOBAL_LOAD_GAD,
  436.                     LA_ID,        GAD_LOAD,
  437.                     LA_NoKey,    TRUE,
  438.                     LABT_ExtraFat,    TRUE,
  439.                 TAG_DONE);
  440.  
  441.                 LT_New(Handle,
  442.                     LA_Type,    BUTTON_KIND,
  443.                     LA_LabelID,    MSG_GLOBAL_SAVE_GAD,
  444.                     LA_ID,        GAD_SAVE,
  445.                     LA_NoKey,    TRUE,
  446.                     LABT_ExtraFat,    TRUE,
  447.                 TAG_DONE);
  448.  
  449.                 LT_New(Handle,
  450.                     LA_Type,    BUTTON_KIND,
  451.                     LA_LabelID,    MSG_GLOBAL_CANCEL_GAD,
  452.                     LA_ID,        GAD_CANCEL,
  453.                     LA_NoKey,    TRUE,
  454.                     LABT_ExtraFat,    TRUE,
  455.                     LABT_EscKey,    TRUE,
  456.                 TAG_DONE);
  457.  
  458.                 LT_EndGroup(Handle);
  459.             }
  460.  
  461.             LT_EndGroup(Handle);
  462.         }
  463.  
  464.         if(PanelWindow = LT_Layout(Handle,LocaleString(MSG_TRANSLATIONPANEL_CHARACTER_TABLE_TXT),NULL,0,0,IDCMP_CLOSEWINDOW,0,
  465.             LAWN_HelpHook,        &GuideHook,
  466.             LAWN_Parent,        Parent,
  467.             WA_DepthGadget,        TRUE,
  468.             WA_CloseGadget,        TRUE,
  469.             WA_DragBar,        TRUE,
  470.             WA_RMBTrap,        TRUE,
  471.             WA_Activate,        TRUE,
  472.         TAG_DONE))
  473.         {
  474.             struct IntuiMessage    *Message;
  475.             BOOLEAN             Done = FALSE;
  476.             ULONG             MsgClass,
  477.                          MsgQualifier;
  478.             UWORD             MsgCode;
  479.             struct Gadget        *MsgGadget;
  480.             LONG             CharBase = 0,i;
  481.             UBYTE             DummyBuffer[256],
  482.                         *DummyChar;
  483.             struct FileRequester    *FileRequest;
  484.             WORD             KeyCode;
  485.  
  486.             PushWindow(PanelWindow);
  487.  
  488.             LT_ShowWindow(Handle,TRUE);
  489.  
  490.             do
  491.             {
  492.                 if(Wait(PORTMASK(PanelWindow -> UserPort) | SIG_BREAK) & SIG_BREAK)
  493.                     break;
  494.  
  495.                 while(Message = (struct IntuiMessage *)GT_GetIMsg(PanelWindow -> UserPort))
  496.                 {
  497.                     MsgClass    = Message -> Class;
  498.                     MsgQualifier    = Message -> Qualifier;
  499.                     MsgCode        = Message -> Code;
  500.                     MsgGadget    = (struct Gadget *)Message -> IAddress;
  501.  
  502.                     if(MsgClass == IDCMP_RAWKEY)
  503.                         KeyCode = LT_GetCode(MsgQualifier,MsgClass,MsgCode,MsgGadget);
  504.                     else
  505.                         KeyCode = -1;
  506.  
  507.                     GT_ReplyIMsg(Message);
  508.  
  509.                     LT_HandleInput(Handle,MsgQualifier,&MsgClass,&MsgCode,&MsgGadget);
  510.  
  511.                     if(MsgClass == IDCMP_CLOSEWINDOW)
  512.                         Done = TRUE;
  513.  
  514.                     if(KeyCode != -1 && KeyCode != '\033')
  515.                     {
  516.                         if(KeyCode >= CharBase && KeyCode < CharBase + 128)
  517.                             LT_PressButton(Handle,GAD_CHAR + KeyCode - CharBase);
  518.  
  519.                         LT_LockWindow(PanelWindow);
  520.  
  521.                         MadeChanges |= CodePanel(PanelWindow,KeyCode,SendTable,ReceiveTable);
  522.  
  523.                         LT_UnlockWindow(PanelWindow);
  524.  
  525.                         LT_ShowWindow(Handle,TRUE);
  526.                     }
  527.  
  528.                     if(MsgClass == IDCMP_GADGETUP)
  529.                     {
  530.                         switch(MsgGadget -> GadgetID)
  531.                         {
  532.                             case GAD_PAGE:
  533.  
  534.                                 LT_LockWindow(PanelWindow);
  535.  
  536.                                 if(MsgCode)
  537.                                 {
  538.                                     for(i = 0 ; i < 128 ; i++)
  539.                                         LT_SetAttributes(Handle,GAD_CHAR + i,LA_LabelText,CharCodes[128 + i],TAG_DONE);
  540.  
  541.                                     CharBase = 128;
  542.                                 }
  543.                                 else
  544.                                 {
  545.                                     for(i = 0 ; i < 128 ; i++)
  546.                                         LT_SetAttributes(Handle,GAD_CHAR + i,LA_LabelText,CharCodes[0 + i],TAG_DONE);
  547.  
  548.                                     CharBase = 0;
  549.                                 }
  550.  
  551.                                 if(!LT_Rebuild(Handle,NULL,0,0,FALSE))
  552.                                 {
  553.                                     LT_DeleteHandle(Handle);
  554.  
  555.                                     Handle = NULL;
  556.  
  557.                                     Done = TRUE;
  558.                                 }
  559.                                 else
  560.                                     LT_UnlockWindow(PanelWindow);
  561.  
  562.                                 break;
  563.  
  564.                             case GAD_DEFAULT:
  565.  
  566.                                 if(SendTable)
  567.                                 {
  568.                                     struct TranslationEntry **Table;
  569.  
  570.                                     if(Table = AllocTranslationTable())
  571.                                     {
  572.                                         if(FillTranslationTable(Table))
  573.                                         {
  574.                                             FreeTranslationTable(SendTable);
  575.  
  576.                                             SendTable = Table;
  577.                                         }
  578.                                     }
  579.                                 }
  580.  
  581.                                 if(ReceiveTable)
  582.                                 {
  583.                                     struct TranslationEntry **Table;
  584.  
  585.                                     if(Table = AllocTranslationTable())
  586.                                     {
  587.                                         if(FillTranslationTable(Table))
  588.                                         {
  589.                                             FreeTranslationTable(ReceiveTable);
  590.  
  591.                                             ReceiveTable = Table;
  592.                                         }
  593.                                     }
  594.                                 }
  595.  
  596.                                 break;
  597.  
  598.                             case GAD_USE:
  599.  
  600.                                 Done = TRUE;
  601.                                 break;
  602.  
  603.                             case GAD_CANCEL:
  604.  
  605.                                 Done = TRUE;
  606.                                 break;
  607.  
  608.                             case GAD_LOAD:
  609.  
  610.                                 strcpy(DummyBuffer,LastTranslation);
  611.  
  612.                                 DummyChar = PathPart(DummyBuffer);
  613.  
  614.                                 *DummyChar = 0;
  615.  
  616.                                 LT_LockWindow(PanelWindow);
  617.  
  618.                                 if(FileRequest = GetFile(PanelWindow,LocaleString(MSG_TRANSLATIONPANEL_LOAD_TRANSLATION_TABLES_TXT),DummyBuffer,FilePart(LastTranslation),DummyBuffer,"#?.prefs",FALSE,FALSE,FALSE,LocaleString(MSG_GLOBAL_LOAD_TXT),TRUE))
  619.                                 {
  620.                                     struct TranslationEntry **Send,**Receive = NULL;
  621.                                     BOOLEAN            Success = FALSE;
  622.  
  623.                                     if(Send = AllocTranslationTable())
  624.                                     {
  625.                                         if(Receive = AllocTranslationTable())
  626.                                             Success = LoadTranslationTables(DummyBuffer,Send,Receive);
  627.                                     }
  628.  
  629.                                     if(!Success)
  630.                                     {
  631.                                         ShowError(PanelWindow,ERR_LOAD_ERROR,IoErr(),DummyBuffer);
  632.  
  633.                                         if(Send)
  634.                                             FreeTranslationTable(Send);
  635.  
  636.                                         if(Receive)
  637.                                             FreeTranslationTable(Receive);
  638.                                     }
  639.                                     else
  640.                                     {
  641.                                         strcpy(Config -> FileConfig -> TranslationFileName,DummyBuffer);
  642.  
  643.                                         strcpy(LastTranslation,DummyBuffer);
  644.  
  645.                                         MadeChanges    = FALSE;
  646.                                         Created        = FALSE;
  647.  
  648.                                         FreeTranslationTable(SendTable);
  649.                                         FreeTranslationTable(ReceiveTable);
  650.  
  651.                                         SendTable    = Send;
  652.                                         ReceiveTable    = Receive;
  653.                                     }
  654.  
  655.                                     FreeAslRequest(FileRequest);
  656.                                 }
  657.  
  658.                                 LT_UnlockWindow(PanelWindow);
  659.                                 break;
  660.  
  661.                             case GAD_SAVE:
  662.  
  663.                                 strcpy(DummyBuffer,LastTranslation);
  664.  
  665.                                 DummyChar = PathPart(DummyBuffer);
  666.  
  667.                                 *DummyChar = 0;
  668.  
  669.                                 LT_LockWindow(PanelWindow);
  670.  
  671.                                 if(FileRequest = GetFile(PanelWindow,LocaleString(MSG_TRANSLATIONPANEL_SAVE_TRANSLATION_TABLES_TXT),DummyBuffer,FilePart(LastTranslation),DummyBuffer,"#?.prefs",TRUE,FALSE,FALSE,LocaleString(MSG_GLOBAL_SAVE_TXT),TRUE))
  672.                                 {
  673.                                     if(!SaveTranslationTables(DummyBuffer,SendTable,ReceiveTable))
  674.                                         ShowError(PanelWindow,ERR_SAVE_ERROR,IoErr(),DummyBuffer);
  675.                                     else
  676.                                     {
  677.                                         strcpy(LastTranslation,DummyBuffer);
  678.  
  679.                                         MadeChanges = FALSE;
  680.  
  681.                                         Created = FALSE;
  682.                                     }
  683.  
  684.                                     FreeAslRequest(FileRequest);
  685.                                 }
  686.  
  687.                                 LT_UnlockWindow(PanelWindow);
  688.                                 break;
  689.  
  690.                             default:
  691.  
  692.                                 if(MsgGadget -> GadgetID >= GAD_CHAR && MsgGadget -> GadgetID < GAD_CHAR + 128)
  693.                                 {
  694.                                     LT_LockWindow(PanelWindow);
  695.  
  696.                                     MadeChanges |= CodePanel(PanelWindow,CharBase + MsgGadget -> GadgetID - GAD_CHAR,SendTable,ReceiveTable);
  697.  
  698.                                     LT_UnlockWindow(PanelWindow);
  699.  
  700.                                     LT_ShowWindow(Handle,TRUE);
  701.                                 }
  702.  
  703.                                 break;
  704.                         }
  705.                     }
  706.                 }
  707.             }
  708.             while(!Done);
  709.  
  710.             PopWindow();
  711.         }
  712.  
  713.         LT_DeleteHandle(Handle);
  714.     }
  715.  
  716.     if(!MadeChanges && Created || (IsStandardTable(SendTable) && IsStandardTable(ReceiveTable)))
  717.     {
  718.         FreeTranslationTable(SendTable);
  719.  
  720.         SendTable = NULL;
  721.  
  722.         FreeTranslationTable(ReceiveTable);
  723.  
  724.         ReceiveTable = NULL;
  725.     }
  726.  
  727.     *SendTablePtr        = SendTable;
  728.     *ReceiveTablePtr    = ReceiveTable;
  729.  
  730.     return(MadeChanges);
  731. }
  732.